<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>运算符优先级(Precedence)</title>
  <!-- 
    运算符优先级决定了在表达式中不同运算符的执行顺序。

    1. 括号  `()`
    - 优先级：最高
    - 功能：用于改变运算顺序，强制先计算括号内的表达式。

    2. 成员访问  `.`  和 数组索引  `[]`
    - 优先级：高
    - 功能：用于访问对象的属性或数组的元素。
      let obj = { a: 1 };
      let value = obj.a; // 结果为 1

    3. 自增和自减  `++`  和  `--`
    - 优先级：高
    - 功能：用于将变量的值增加或减少 1。
    let a = 5;
      let b = ++a; // 结果为 6，a 变为 6

    4. 一元运算符  `+` 、 `-`  和  `!`
    - 优先级：高
    - 功能：用于改变数值的符号或逻辑非运算。
      let a = -5; // 负数
      let b = !true; // 结果为 false

    5. 乘法、除法和取余  `*` 、 `/` 、 `%`
    - 优先级：中
    - 功能：用于执行乘法、除法和取余运算。
      let result = 10 / 2 * 3; // 结果为 15

    6. 加法和减法  `+`  和  `-`
    - 优先级：中
    - 功能：用于执行加法和减法运算。
      let result = 5 + 3 - 2; // 结果为 6

    7. 位运算符  `&` 、 `|` 、 `^`
    - 优先级：低
    - 功能：用于执行位与、位或和位异或运算。
      let result = 5 & 3; // 结果为 1（二进制：0101 & 0011 = 0001）

    8. 逻辑运算符  `&&`  和  `||`
    - 优先级：低
    - 功能：用于执行逻辑与和逻辑或运算。
      let result = true && false; // 结果为 false

    9. 三元运算符  `? :`
    - 优先级：低
    - 功能：用于根据条件选择值。
      let result = (5 > 3) ? '大于' : '小于'; // 结果为 '大于'

    10. 赋值运算符  `=`
    - 先级：最低
    - 功*：用于将右侧的值赋给左侧的变量。
      let a = 5; // 将 5 赋值给 a

  总结表
| 运算符          | 描述               | 优先级 |
|-----------------|--------------------|--------|
|  `()`             | 括号               | 最高   |
|  `.`  和  `[]`      | 成员访问和数组索引 | 高     |
|  `++`  和  `--`     | 自增和自减         | 高     |
|  `+` 、 `-` 、 `!`    | 一元运算符         | 高     |
|  `*` 、 `/` 、 `%`    | 乘法、除法、取余   | 中     |
|  `+`  和  `-`       | 加法和减法         | 中     |
|  `&` 、 `|` 、 `^`    | 位运算             | 低     |
|  `&&`  和  `||`     | 逻辑运算           | 低     |
|  `? :`            | 三元运算           | 低     |
|  `=`              | 赋值               | 最低   |

  -->
</head>
<body>

  <script>

    // 运算符优先级

    // 1. 括号运算符  `()`
    // - 优先级：最高
    // - 功能：用于改变运算的顺序。
      let result = (5 + 3) * 2; // 结果为 16

    // 2. 成员访问运算符  `.`  和  `[]`
    // - 优先级：高
    // - 功能：用于访问对象的属性或数组的元素。
      let obj = { name: 'Alice', age: 25 };
      let arr = [1, 2, 3];
      let name = obj.name; // 结果为 'Alice'
      let second = arr[1]; // 结果为 2

    // 3. 总和运算符
      let a = 6;
      let res = 2 + 3 * 4 * ++a; // 结果为 2 + 3 * 4 * 7 = 86
      console.log(res);
      


  </script>
  
</body>
</html>